package com.basic.object;

import org.openjdk.jol.info.ClassLayout;

/**
 * object 对象头详情测试
 * https://www.cnblogs.com/LemonFive/p/11246086.html
 * @author xiaoLin
 *
 */
public class ObjectMarkWordDetailTest {

	public static void main(String[] args) throws InterruptedException {
		Thread.sleep(5000);
		final A a = new A();
		//无锁测试
//		System.out.println(ClassLayout.parseInstance(a).toPrintable());
		//偏向锁测试
		synchronized (a) {
			System.out.println(ClassLayout.parseInstance(a).toPrintable());
		}
//		Thread t = new Thread(new Runnable() {
//			
//			public void run() {
//				synchronized (a) {
//					System.out.println(ClassLayout.parseInstance(a).toPrintable());
//				}
//			}
//		});
//		t.start();
//		t.join();
		//轻量级锁测试
//		Thread t1 = new Thread(new Runnable() {
//			public void run() {
//				synchronized (a) {
//					System.out.println("t1 locking");
//					System.out.println(ClassLayout.parseInstance(a).toPrintable());
//				}
//				try {
//					Thread.sleep(3000);
//				} catch (Exception e) {
//				}
//			}
//		});
//		Thread t2 = new Thread(new Runnable() {
//			public void run() {
//				synchronized (a) {
//					System.out.println("t2 locking");
//					System.out.println(ClassLayout.parseInstance(a).toPrintable());
//				}	
//				try {
//					Thread.sleep(3000);
//				} catch (Exception e) {
//				}
//			}
//		});
//		t1.start();
//		t2.start();
//		Thread.sleep(4000);
	}
}

class A {
	boolean flag = false;
}
